package pers.qianyu.module.core.domain.image.converter;

import com.baomidou.mybatisplus.extension.plugins.pagination.*;
import org.springframework.stereotype.*;
import pers.qianyu.module.core.comm.*;
import pers.qianyu.module.core.domain.image.dto.*;
import pers.qianyu.module.core.domain.image.entity.*;
import pers.qianyu.module.core.domain.image.enums.*;
import pers.qianyu.module.core.domain.image.query.*;
import pers.qianyu.module.core.domain.image.vo.*;

import java.util.*;
import java.util.stream.*;

/**
 * @author mizzle rain
 * @date 2021年2月11日13:22:31
 */
@Component
public class NoticeConverter extends BaseConverter {
    public NoticePO convertToPO(NoticeDTO noticeDTO) {
        NoticePO noticePO = new NoticePO();
        noticePO.setType(NoticeTypeEnum.getEnum(noticeDTO.getType()));
        noticePO.setStatus(0);
        noticePO.setCreatedBy(noticeDTO.getCreatedBy());
        noticePO.setUpdatedBy(noticePO.getCreatedBy());
        noticePO.setCreatorName(noticeDTO.getCreatorName());
        noticePO.setCreatorAvatar(noticeDTO.getCreatorAvatar());
        noticePO.setTargetId(noticeDTO.getTargetId());
        noticePO.setTargetName(noticeDTO.getTargetName());
        noticePO.setOwnerId(noticeDTO.getOwnerId());
        noticePO.setOwnerName(noticeDTO.getOwnerName());
        noticePO.setContent(noticeDTO.getContent());
        return noticePO;
    }

    public NoticeVO convertToVO(NoticePO noticePO) {
        NoticeVO noticeVO = new NoticeVO();
        noticeVO.setType(noticePO.getType().getValue());
        noticeVO.setStatus(noticePO.getStatus());
        noticeVO.setCreatorName(noticePO.getCreatorName());
        noticeVO.setCreatorAvatar(noticePO.getCreatorAvatar());
        noticeVO.setTargetId(noticePO.getTargetId());
        noticeVO.setTargetName(noticePO.getTargetName());
        noticeVO.setOwnerId(noticePO.getOwnerId());
        noticeVO.setOwnerName(noticePO.getOwnerName());
        noticeVO.setContent(noticePO.getContent());
        entityToVO(noticePO, noticeVO);
        return noticeVO;
    }

    public Pagination<NoticeVO> convertToPagination(Page<NoticePO> noticePOPage) {
        Pagination<NoticeVO> pagination = new Pagination<>();
        pagination.setCurrent(noticePOPage.getCurrent());
        pagination.setTotal(noticePOPage.getTotal());
        pagination.setSize(noticePOPage.getSize());
        pagination.setRecords(
                Optional.ofNullable(noticePOPage.getRecords())
                        .map(List::stream)
                        .orElseGet(Stream::empty)
                        .map(this::convertToVO)
                        .collect(Collectors.toList()));
        return pagination;
    }

    public NoticePO convertToPO(NoticeQuery noticeQuery) {
        NoticePO noticePO = new NoticePO();
        if (Objects.nonNull(noticeQuery.getType())) {
            noticePO.setType(NoticeTypeEnum.getEnum(noticeQuery.getType()));
        }
        noticePO.setStatus(noticeQuery.getStatus());
        noticePO.setTargetId(noticeQuery.getTargetId());
        noticePO.setOwnerId(noticeQuery.getOwnerId());
        return noticePO;
    }
}
